// Go作者版权所有。版权所有。
// 此源代码的使用受BSD样式的约束
// 可以在许可证文件中找到的许可证。

package x86

// argListMax指定预期由obj.Prog携带的arg计数上限。
// 最大长度（obj.Prog.RestArgs）可由此推断为4。
const argListMax int = 6

type argList [argListMax]uint8

type ytab struct {
	zcase   uint8
	zoffset uint8

	// 最后一个参数通常是目的地。
	// 对于一元指令，unaryDst用于确定
	// 如果单个参数是源或目标。
	args argList
}

// 如果yt与args兼容，则返回true。
// None
// 使用args和yt.args中的元素
// 索引ycover表，如'ycover[args[i]+yt.args[i]`。
// 这意味着args应该包含已经存在的值
// 乘以Ymax。
func (yt *ytab) match(args []int) bool {
	// 需要进行后续Yxxx检查以避免出现案例
	// 匹配较短参数列表的位置。
	// 如果我们有确切的yt.args长度，它可能是'yt.argc！=len（args）`。
	if len(args) < len(yt.args) && yt.args[len(args)] != Yxxx {
		return false
	}

	for i := range args {
		if ycover[args[i]+int(yt.args[i])] == 0 {
			return false
		}
	}

	return true
}
